﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DeltaFlex.Data;
using Taula = DeltaFlex.Negoci.ConsTaules.Ordre_Treball;
using System.Data;


namespace DeltaFlex.Negoci
{
    [Serializable()]
    public class Ordre_Treball
    {
        #region Variables
        private int _idOrdre_Treball;
        private int _idClient;
        private int _idImpresor;
        private DateTime _dataEntrega;
        private string _horaEntrega;
        private string _referenciaClient;
        private string _idTreball;
        private string _pedidoClient;
        private string _tipoTreball;
        private string _tipoCaixa;
        private string _fitxa;
        private string _tipoMesures;
        private string _mesures;
        private string _numTroquel;
        private string _poses;
        private string _materialAdjunt;
        private string _materialTronar;
        private string _colors;
        private string _tipoClitxe;
        private int _idMaquina;
        private string _deflaccio;
        private string _feinaFer;
        private string _observacions;
        private string _nomArxiu;
        #endregion

        #region Atributs
        public int IdOrdre_Treball
        {
            get { return _idOrdre_Treball; }
            set { _idOrdre_Treball = value; }
        }

        public int IdClient
        {
            get { return _idClient; }
            set { _idClient = value; }
        }

        public int IdImpresor
        {
            get { return _idImpresor; }
            set { _idImpresor = value; }
        }
        
        public DateTime DataEntrega
        {
            get { return _dataEntrega; }
            set { _dataEntrega = value; }
        }

        public string HoraEntrega
        {
            get { return _horaEntrega; }
            set { _horaEntrega = value; }
        }

        public string ReferenciaClient
        {
            get { return _referenciaClient; }
            set { _referenciaClient = value; }
        }

        public string IdTreball
        {
            get { return _idTreball; }
            set { _idTreball = value; }
        }

        public string PedidoClient
        {
            get { return _pedidoClient; }
            set { _pedidoClient = value; }
        }


        public string TipoTreball
        {
            get { return _tipoTreball; }
            set { _tipoTreball = value; }
        }

        public string TipoCaixa
        {
            get { return _tipoCaixa; }
            set { _tipoCaixa = value; }
        }

        public string Fitxa
        {
            get { return _fitxa; }
            set { _fitxa = value; }
        }

        public string TipoMesures
        {
            get { return _tipoMesures; }
            set { _tipoMesures = value; }
        }

        public string Mesures
        {
            get { return _mesures; }
            set { _mesures = value; }
        }

        public string NumTroquel
        {
            get { return _numTroquel; }
            set { _numTroquel = value; }
        }

        public string Poses
        {
            get { return _poses; }
            set { _poses = value; }
        }

        public string MaterialAdjunt
        {
            get { return _materialAdjunt; }
            set { _materialAdjunt = value; }
        }

        public string MaterialTronar
        {
            get { return _materialTronar; }
            set { _materialTronar = value; }
        }

        public string Colors
        {
            get { return _colors; }
            set { _colors = value; }
        }

        public string TipoClitxe
        {
            get { return _tipoClitxe; }
            set { _tipoClitxe = value; }
        }
        public int IdMaquina
        {
            get { return _idMaquina; }
            set { _idMaquina = value; }
        }

        public string Deflaccio
        {
            get { return _deflaccio; }
            set { _deflaccio = value; }
        }

        public string FeinaFer
        {
            get { return _feinaFer; }
            set { _feinaFer = value; }
        }

        public string Observacions
        {
            get { return _observacions; }
            set { _observacions = value; }
        }

        public string NomArxiu
        {
            get { return _nomArxiu; }
            set { _nomArxiu = value; }
        }

        #region Bindings
        public string BindClient
        {
            get
            {
                if (IdClient > 0)
                    return Client.LlistarClientByIDClient(IdClient)[0].NomClient;
                else
                    return "";
            }
        }

        public string BindImpressor
        {
            get
            {
                if (IdImpresor > 0)
                    return Client.LlistarClientByIDClient(IdImpresor)[0].NomClient;
                else
                    return "";
            }
        }

        public string BindMaquina
        {
            get
            {
                if (IdImpresor > 0)
                    return MaquinaCartoner.CercarMaquinaByIdClient(IdImpresor)[0].NomMaquina;
                else
                    return "";
            }
        }

        public string BindData
        {
            get { return _dataEntrega.ToShortDateString(); }
        }
        #endregion

        #endregion

        #region Insert
        public static void InsertarOrdre_Treball(int idOrdre, int idClient, int idImpresor, DateTime dataEntrega, string horaEntrega, string referenciaClient, string idTreball, 
                                                 string pedidoClient,string tipoTreball, string tipocaixa, string fitxa, string tipoMesures, string mesures, string numTroquel, 
                                                 string poses, string materialAdjunt, string materialTornar,string colors, string tipoClitxe, int idMaquina, string deflaccio, 
                                                 string feinaFer, string observacions, string nomarxiu)
        {
            try
            {
                Data.Ordre_Treball.InsertarOrdre_Treball(idOrdre, idClient, idImpresor, dataEntrega, horaEntrega, referenciaClient, idTreball, pedidoClient,
                                                         tipoTreball, tipocaixa, fitxa, tipoMesures, mesures, numTroquel,poses, materialAdjunt, materialTornar,
                                                         colors, tipoClitxe, idMaquina, deflaccio, feinaFer, observacions, nomarxiu);
            }
            catch { throw; }
        }
        #endregion
        
        #region Select
        /// <summary>
        /// Retorna el següent index d'una ordre
        /// </summary>
        /// <returns></returns>
        public static int Cercar_NextIdOrdreTreball()
        {
            int nextIdOrdreTreball = -1;
            IDataReader reader = null;

            try
            {
                reader = Data.Ordre_Treball.Cercar_NextIdOrdreTreball();

                if (reader.Read())
                    nextIdOrdreTreball = MapEntityFromDataReader(reader)._idOrdre_Treball;
            }
            catch (Exception) { throw; }
            finally
            {
                if (reader != null) reader.Close();
            }
            return nextIdOrdreTreball;
        }

        public static Ordre_Treball GetOTByIdOT(int idOrdre)
        {
            Ordre_Treball ot = new Ordre_Treball();
            IDataReader reader = null;

            try
            {
                reader = Data.Ordre_Treball.GetOTByIdOT(idOrdre);

                if (reader.Read())
                    ot = MapEntityFromDataReader(reader);
            }
            catch (Exception) { throw; }
            finally
            {
                if (reader != null) reader.Close();
            }
            return ot;
        }

        public static List<Ordre_Treball> LlistarOrdreTreball(int? idOrdreTreball, int idClient, string nomArxiu, string referenciaClient, string idTreball, string pedidoClient)
        {
            List<Ordre_Treball> lstOT = new List<Ordre_Treball>();
            IDataReader reader = null;

            try
            {
                reader = Data.Ordre_Treball.LlistarOrdreTreball(idOrdreTreball, idClient, nomArxiu, referenciaClient, idTreball, pedidoClient);
                 
                while(reader.Read())
                {
                    lstOT.Add(MapEntityFromDataReader(reader));
                }
            }
            catch (Exception) { throw; }
            finally
            {
                if (reader != null) reader.Close();
            }
            return lstOT;

        }
        
        #endregion

        #region Update
        public static void ActualitzarOT(int idOrdre, int idClient, int idImpresor, DateTime dataEntrega, string horaEntrega, string referenciaClient, string idTreball,
                                         string pedidoClient, string tipoTreball, string tipocaixa, string fitxa, string tipoMesures, string mesures, string numTroquel,
                                         string poses, string materialAdjunt, string materialTornar, string colors, string tipoClitxe, int idMaquina, string deflaccio,
                                         string feinaFer, string observacions, string nomarxiu)
        {
            try
            {
                Data.Ordre_Treball.ActualitzarOT(idOrdre, idClient, idImpresor, dataEntrega, horaEntrega, referenciaClient, idTreball, pedidoClient,
                                                 tipoTreball, tipocaixa, fitxa, tipoMesures, mesures, numTroquel, poses, materialAdjunt, materialTornar,
                                                 colors, tipoClitxe, idMaquina, deflaccio, feinaFer, observacions, nomarxiu);
            }
            catch { throw; }
        }
        #endregion

        #region Mapeig
        public static Ordre_Treball MapEntityFromDataReader(IDataReader record)
        {
            Ordre_Treball ordre_Treball = new Ordre_Treball();

            MemberAllocation.Allocate(record, Taula.COLUMNA_IDORDRE, ref ordre_Treball._idOrdre_Treball);
            MemberAllocation.Allocate(record, Taula.COLUMNA_IDCLIENT, ref ordre_Treball._idClient);
            MemberAllocation.Allocate(record, Taula.COLUMNA_IDIMPRESOR, ref ordre_Treball._idImpresor);
            MemberAllocation.Allocate(record, Taula.COLUMNA_DATAENTREGA, ref ordre_Treball._dataEntrega);
            MemberAllocation.Allocate(record, Taula.COLUMNA_HORAENTREGA, ref ordre_Treball._horaEntrega);
            MemberAllocation.Allocate(record, Taula.COLUMNA_REFERENCIACLIENT, ref ordre_Treball._referenciaClient);
            MemberAllocation.Allocate(record, Taula.COLUMNA_IDTREBALL, ref ordre_Treball._idTreball);
            MemberAllocation.Allocate(record, Taula.COLUMNA_PEDIDOCLIENT, ref ordre_Treball._pedidoClient);
            MemberAllocation.Allocate(record, Taula.COLUMNA_TIPOTREBALL, ref ordre_Treball._tipoTreball);
            MemberAllocation.Allocate(record, Taula.COLUMNA_TIPOCAIXA, ref ordre_Treball._tipoCaixa);
            MemberAllocation.Allocate(record, Taula.COLUMNA_FITXA, ref ordre_Treball._fitxa);
            MemberAllocation.Allocate(record, Taula.COLUMNA_TIPOMESURES, ref ordre_Treball._tipoMesures);
            MemberAllocation.Allocate(record, Taula.COLUMNA_MESURES, ref ordre_Treball._mesures);
            MemberAllocation.Allocate(record, Taula.COLUMNA_NUMTROQUEL, ref ordre_Treball._numTroquel);
            MemberAllocation.Allocate(record, Taula.COLUMNA_POSES, ref ordre_Treball._poses);
            MemberAllocation.Allocate(record, Taula.COLUMNA_MATERIALADJUNT, ref ordre_Treball._materialAdjunt);
            MemberAllocation.Allocate(record, Taula.COLUMNA_MATERIALTORNAR, ref ordre_Treball._materialTronar);
            MemberAllocation.Allocate(record, Taula.COLUMNA_COLORS, ref ordre_Treball._colors);
            MemberAllocation.Allocate(record, Taula.COLUMNA_TIPOCLITXE, ref ordre_Treball._tipoClitxe);
            MemberAllocation.Allocate(record, Taula.COLUMNA_IDMAQUINA, ref ordre_Treball._idMaquina);
            MemberAllocation.Allocate(record, Taula.COLUMNA_DEFLACCIO, ref ordre_Treball._deflaccio);
            MemberAllocation.Allocate(record, Taula.COLUMNA_FEINAFER, ref ordre_Treball._feinaFer);
            MemberAllocation.Allocate(record, Taula.COLUMNA_OBSERVACIONS, ref ordre_Treball._observacions);
            MemberAllocation.Allocate(record, Taula.COLUMNA_NOMARXIU, ref ordre_Treball._nomArxiu);
            
            return ordre_Treball;
        }

        public static Ordre_Treball MapEntityFromId(IDataReader record)
        {
            Ordre_Treball ordre_Treball = new Ordre_Treball();

            MemberAllocation.Allocate(record, Taula.COLUMNA_IDORDRE, ref ordre_Treball._idOrdre_Treball);

            return GetOTByIdOT(ordre_Treball._idOrdre_Treball);
        }
        #endregion

    }
}
